今天聊聊JS中的資料型別有哪些還有如何判斷資料是什麼型別呢?最後談一下JS的強制型別轉換。
資料型別(data type)主要是將資料分門別類,讓電腦能知道這筆資料是屬於什麼類型,當使用到不對的資料型別時,程式執行就會發生錯誤。ES6標準定義了7種資料型別:
String 字串
用於表示文字的資料型別,以單引號''
或雙引號""
包裹起來的內容,如'Hi’、'123’、'String’。
Number 數字
用於表示數字的資料型別,不需要引號直接輸入數字,在JS中,整數或小數都歸屬於數字,如123、3.14。
Boolean 布林值
只有兩種值,可以當作對或錯,表示方式為true
跟false
。
Object 物件
用於多筆資料的結構,如陣列、物件及函式都屬於物件型別,運用kay-value pair來組合多筆資料,如
{ name: ‘Mike’, age: 30 }、[0, 1, 2, 3, 4]
Null
null
在JS表示空值、不存在的物件,比較會用於判斷有沒有物件,如想抓取某個網頁元素,卻發現這個元素不存在時,便會收到回傳值null
。
Underfined
underfined
表示你宣告了變數但沒有指派內容給它,這時輸出該變數便會得到underfined
。
Symbol
ES6新增的型別,代表獨特、不會重複的值,可以當作獨一無二的物件屬性名稱,進而防止屬性名稱產生衝突。
typeof
語法,是用來檢查資料的型別,使用方法舉例如下:
const myName = 'Mike'
console.log(typeof myName) // string
const myAge = 30
console.log(typeof myAge) // number
const maritalStatus = false
console.log(typeof maritalStatus) // boolean
const bmi = {
height: 170,
weight: 68,
}
console.log(typeof bmi) // object
由於JS會猜測我們想表達的意思是什麼(是個被聰明誤導的孩子),假如在執行時發現有不同的資料型別放在一起,它會嘗試以它的理解來給予我們執行結果,在實作時需要特別留意這件事情,否則很容易會得到不是我們想要的結果,舉例來說:
const englishScore = 60 // number
const mathScore = '70' // string
// 假設希望將兩分數加起來得到總分130
// 但一個沒注意把數學分數輸錯型別..
// 將兩分數相加輸出之後得到的是6070...!!!?
console.log(englishScore + mathScore)
從上面例子可以看到,因為兩個分數的資料型別不同,JS不會告訴你有錯誤,而是會乖巧的猜猜你在想什麼的輸出結果,這樣的結果很容易導致錯誤或失控,所以要特別小心這種意外狀況的發生。